{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "回归方程的参数=== [1.41593242 6.04962493]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<caption>OLS Regression Results</caption>\n",
       "<tr>\n",
       "  <th>Dep. Variable:</th>            <td>y</td>        <th>  R-squared:         </th> <td>   1.000</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Model:</th>                   <td>OLS</td>       <th>  Adj. R-squared:    </th> <td>   1.000</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Method:</th>             <td>Least Squares</td>  <th>  F-statistic:       </th> <td>7.030e+04</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Date:</th>             <td>Fri, 30 Aug 2019</td> <th>  Prob (F-statistic):</th> <td>8.75e-34</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Time:</th>                 <td>22:28:25</td>     <th>  Log-Likelihood:    </th> <td> -25.853</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>No. Observations:</th>      <td>    20</td>      <th>  AIC:               </th> <td>   55.71</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Residuals:</th>          <td>    18</td>      <th>  BIC:               </th> <td>   57.70</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Model:</th>              <td>     1</td>      <th>                     </th>     <td> </td>    \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Covariance Type:</th>      <td>nonrobust</td>    <th>                     </th>     <td> </td>    \n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "    <td></td>       <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>const</th> <td>    1.4159</td> <td>    0.400</td> <td>    3.537</td> <td> 0.002</td> <td>    0.575</td> <td>    2.257</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>x1</th>    <td>    6.0496</td> <td>    0.023</td> <td>  265.145</td> <td> 0.000</td> <td>    6.002</td> <td>    6.098</td>\n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "  <th>Omnibus:</th>       <td> 0.188</td> <th>  Durbin-Watson:     </th> <td>   2.013</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Prob(Omnibus):</th> <td> 0.910</td> <th>  Jarque-Bera (JB):  </th> <td>   0.085</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Skew:</th>          <td> 0.120</td> <th>  Prob(JB):          </th> <td>   0.958</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Kurtosis:</th>      <td> 2.790</td> <th>  Cond. No.          </th> <td>    33.9</td>\n",
       "</tr>\n",
       "</table><br/><br/>Warnings:<br/>[1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.summary.Summary'>\n",
       "\"\"\"\n",
       "                            OLS Regression Results                            \n",
       "==============================================================================\n",
       "Dep. Variable:                      y   R-squared:                       1.000\n",
       "Model:                            OLS   Adj. R-squared:                  1.000\n",
       "Method:                 Least Squares   F-statistic:                 7.030e+04\n",
       "Date:                Fri, 30 Aug 2019   Prob (F-statistic):           8.75e-34\n",
       "Time:                        22:28:25   Log-Likelihood:                -25.853\n",
       "No. Observations:                  20   AIC:                             55.71\n",
       "Df Residuals:                      18   BIC:                             57.70\n",
       "Df Model:                           1                                         \n",
       "Covariance Type:            nonrobust                                         \n",
       "==============================================================================\n",
       "                 coef    std err          t      P>|t|      [0.025      0.975]\n",
       "------------------------------------------------------------------------------\n",
       "const          1.4159      0.400      3.537      0.002       0.575       2.257\n",
       "x1             6.0496      0.023    265.145      0.000       6.002       6.098\n",
       "==============================================================================\n",
       "Omnibus:                        0.188   Durbin-Watson:                   2.013\n",
       "Prob(Omnibus):                  0.910   Jarque-Bera (JB):                0.085\n",
       "Skew:                           0.120   Prob(JB):                        0.958\n",
       "Kurtosis:                       2.790   Cond. No.                         33.9\n",
       "==============================================================================\n",
       "\n",
       "Warnings:\n",
       "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
       "\"\"\""
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#调用库\n",
    "import statsmodels.api as sm #最小二乘\n",
    "import numpy as np      #numpy库\n",
    "import matplotlib.pyplot as plt  #导入图形展示库\n",
    "\n",
    "#设回归公式是: Y=2+6*x\n",
    "#1、设定数据量\n",
    "nsample=20\n",
    "#2、创建一个表示x的array。这里，设x的值从 0到 30 等差排列，共20个数。\n",
    "x=np.linspace(0,30, nsample)\n",
    "#3、使用 sm.add_constant() 在原始数据前加一列常项1。\n",
    "x=sm.add_constant(x) \n",
    "#4、设置模型里的 β0,β1，这里要设置成2和6。\n",
    "beta=np.array([2,6])  #β0, β1分别为2和6\n",
    "#5、误差分析，在数据中加上误差项，所以生成一个长度为k的正态分布样本。\n",
    "e=np.random.normal(size=nsample)\n",
    "#6、产生因变量y的实际值\n",
    "y=np.dot(x,beta)+e     #回归公式是: Y=2+6*x+ e\n",
    "#7、创建模型（利用最小二乘法）\n",
    "model=sm.OLS(y,x)\n",
    "#8、训练模型\n",
    "res=model.fit()\n",
    "#9、获取结果，输出图形\n",
    "#调取计算出的拟合回归模型参数即回归系数\n",
    "print(\"回归方程的参数===\",res.params)\n",
    "#调用拟合结果的 fittedvalues 得到预测值y_pred值\n",
    "y_pred=res.fittedvalues     \n",
    "#将拟合结果画出来\n",
    "fig,ax=plt.subplots()\n",
    "ax.scatter(x[:,-1],y,label=\"training data\")\n",
    "ax.plot(x[:,-1],y_pred,'r',label='predict')\n",
    "ax.legend()\n",
    "ax.set(xlabel='x',ylabel='y')\n",
    "plt.show()\n",
    "#将回归拟合的摘要全部打印出来\n",
    "res.summary()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "回归方程的参数=== [2.80486093 6.04147167 1.99946408]\n"
     ]
    },
    {
     "data": {
      "image/png": "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zbNLPmFbVDRTWnb3+xpi3ii5iIiUEEkpqQz6dS6NDu/m1a735i7z4s81xLxRchERKSFalDnF40sn8+3FV/DtJVfmlvtzDTFvlFxEREqIf62dSrmsDEZe90Bumb/XEPNGySWIpKSk5K4jdr5uuOEGUlJS8q0zfPhwFi5cWKjnz8+nn37KkCFD8q2zZMkSfvrpJ5+/tog4li6l/lfT2T7oITJjLsYA0ZERjOrbwq9riHkT8LXF5A85yeXhhx8+a1tWVhYhISFe9503b945n3/kyJEXFN+FWLJkCRUrVuSqq64KWAwiJVZWFgwZAnXr0njsKJY6S0UFklouF2B2/B46vraImGf+R8fXFl3wdL9nnnmGbdu20apVK4YNG8aSJUvo2rUrd955Jy1atACgT58+tG3blmbNmjFu3LjcfRs2bMihQ4fYsWMHTZs25YEHHqBZs2Z0796d1FTXYN5f//rX3Gu6NGzYkBEjRtCmTRtatGiRu2T/wYMHuf7662nTpg3/93//R4MGDTh06NBZsX7yySdceumlXHPNNSxdujS3fO7cuVx55ZW0bt2abt26sX//fnbs2MGHH37IW2+9RatWrfjhhx881hORQho3zrWK+xtvQBAkFsC1LlVpvLVt29bmtWHDhrPKvJm1KtE2eX6+bfD0V7m3Js/Pt7NWJRb4OfLavn27bdasWe7jxYsX2/Lly9vff/89t+zw4cPWWmtPnTplmzVrZg8dOmSttbZBgwb24MGDdvv27TYkJMTGx8dba60dMGCA/eyzz6y11g4aNMhOmzYtt/7YsWOttda+99579r777rPWWvvII4/YV1991Vpr7fz58y1gDx48eEacSUlJtl69evbAgQP29OnT9qqrrrKPPPKItdba5ORkm52dba21dvz48fZvf/ubtdbaESNG2DFjxuQ+h7d67s7n8xAptQ4dsjYqytquXa11/k/5E7DSFuA3Vt1ihZRzTWp3OfPJfdm/2a5dO2JiYnIfjx07llmzZgGwe/dutmzZQrVq1c7YJyYmhlatWgHQtm1bduzY4fG5+/btm1tn5kzXotQ//vhj7vP37NmTqlXPvqjnzz//TJcuXahRowbguhTA5s2bAUhMTOS2225j7969pKennxG7u4LWExHPZsfvYUxcAg9/MYbbUlL47uHnuS6IVjtXt1gheZs37uv55BXcmrhLlixh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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<caption>OLS Regression Results</caption>\n",
       "<tr>\n",
       "  <th>Dep. Variable:</th>            <td>y</td>        <th>  R-squared:         </th> <td>   1.000</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Model:</th>                   <td>OLS</td>       <th>  Adj. R-squared:    </th> <td>   1.000</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Method:</th>             <td>Least Squares</td>  <th>  F-statistic:       </th> <td>1.876e+07</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Date:</th>             <td>Fri, 30 Aug 2019</td> <th>  Prob (F-statistic):</th> <td>1.99e-139</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Time:</th>                 <td>22:28:51</td>     <th>  Log-Likelihood:    </th> <td> -67.534</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>No. Observations:</th>      <td>    50</td>      <th>  AIC:               </th> <td>   141.1</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Residuals:</th>          <td>    47</td>      <th>  BIC:               </th> <td>   146.8</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Model:</th>              <td>     2</td>      <th>                     </th>     <td> </td>    \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Covariance Type:</th>      <td>nonrobust</td>    <th>                     </th>     <td> </td>    \n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "    <td></td>       <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>const</th> <td>    2.8049</td> <td>    0.136</td> <td>   20.587</td> <td> 0.000</td> <td>    2.531</td> <td>    3.079</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>x1</th>    <td>    6.0415</td> <td>    0.058</td> <td>  104.330</td> <td> 0.000</td> <td>    5.925</td> <td>    6.158</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>x2</th>    <td>    1.9995</td> <td>    0.001</td> <td> 2350.814</td> <td> 0.000</td> <td>    1.998</td> <td>    2.001</td>\n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "  <th>Omnibus:</th>       <td> 0.539</td> <th>  Durbin-Watson:     </th> <td>   1.893</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Prob(Omnibus):</th> <td> 0.764</td> <th>  Jarque-Bera (JB):  </th> <td>   0.365</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Skew:</th>          <td>-0.207</td> <th>  Prob(JB):          </th> <td>   0.833</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Kurtosis:</th>      <td> 2.939</td> <th>  Cond. No.          </th> <td>    401.</td>\n",
       "</tr>\n",
       "</table><br/><br/>Warnings:<br/>[1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.summary.Summary'>\n",
       "\"\"\"\n",
       "                            OLS Regression Results                            \n",
       "==============================================================================\n",
       "Dep. Variable:                      y   R-squared:                       1.000\n",
       "Model:                            OLS   Adj. R-squared:                  1.000\n",
       "Method:                 Least Squares   F-statistic:                 1.876e+07\n",
       "Date:                Fri, 30 Aug 2019   Prob (F-statistic):          1.99e-139\n",
       "Time:                        22:28:51   Log-Likelihood:                -67.534\n",
       "No. Observations:                  50   AIC:                             141.1\n",
       "Df Residuals:                      47   BIC:                             146.8\n",
       "Df Model:                           2                                         \n",
       "Covariance Type:            nonrobust                                         \n",
       "==============================================================================\n",
       "                 coef    std err          t      P>|t|      [0.025      0.975]\n",
       "------------------------------------------------------------------------------\n",
       "const          2.8049      0.136     20.587      0.000       2.531       3.079\n",
       "x1             6.0415      0.058    104.330      0.000       5.925       6.158\n",
       "x2             1.9995      0.001   2350.814      0.000       1.998       2.001\n",
       "==============================================================================\n",
       "Omnibus:                        0.539   Durbin-Watson:                   1.893\n",
       "Prob(Omnibus):                  0.764   Jarque-Bera (JB):                0.365\n",
       "Skew:                          -0.207   Prob(JB):                        0.833\n",
       "Kurtosis:                       2.939   Cond. No.                         401.\n",
       "==============================================================================\n",
       "\n",
       "Warnings:\n",
       "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
       "\"\"\""
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#调用\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import statsmodels.api as sm\n",
    "from statsmodels.stats.outliers_influence import summary_table \n",
    "#回归公式是: y=3+6x+2x^3+e\n",
    "#1、设定数据量\n",
    "nsample=50\n",
    "#2、创建一个表示x的array。这里，设x的值是-10到 10 等差排列，共50个数。\n",
    "x=np.linspace(-10,10, nsample)\n",
    "X=np.column_stack((x,x**3))\n",
    "#3、使用 sm.add_constant() 在 array 上加入一列常项1。\n",
    "X=sm.add_constant(X) #线性组合，在原始数据前加1\n",
    "#4、设置模型里的 β0,β1，β2，这里要设置成3、6和2。\n",
    "beta=np.array([3,6,2])  #β0, β1,β2分别为3、6和2\n",
    "#5、误差分析，在数据中加上误差项。\n",
    "e=np.random.normal(size=nsample)\n",
    "#6、实际值y\n",
    "y=np.dot(X,beta)+e     #回归公式是: y=3+6x+2x^3+e\n",
    "#7、最小二乘法\n",
    "model=sm.OLS(y,X)\n",
    "#8、拟合数据\n",
    "res=model.fit()\n",
    "#9、获取结果，输出图形\n",
    "#调取计算出的拟合回归模型参数即回归系数\n",
    "print(\"回归方程的参数===\",res.params)\n",
    "#调用拟合结果的 fittedvalues 得到拟合的y_pred值\n",
    "y_pred=res.fittedvalues     \n",
    "#将拟合结果画出来\n",
    "fig,ax=plt.subplots()\n",
    "ax.scatter(x,y,label=\"training data\")\n",
    "ax.plot(x,y_pred,'r',label='predict')\n",
    "ax.legend()\n",
    "ax.set(xlabel='x',ylabel='y')\n",
    "plt.show()\n",
    "#将回归拟合的摘要全部打印出来\n",
    "res.summary()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1338, 7)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导入相关库\n",
    "import numpy as np  #numpy库\n",
    "import pandas as pd  #panda库\n",
    "#导入数据可视化包及缺失值处理相关的工具包data visualization and missing values\n",
    "import matplotlib.pyplot as plt   #导入图形展示库\n",
    "import seaborn as sns     # seaborn库\n",
    "%matplotlib inline \n",
    "#导入缺失值处理的库\n",
    "import missingno as msno    # 缺失值\n",
    "#机器学习的工具包machine learning\n",
    "from sklearn.preprocessing import StandardScaler    #标准化库\n",
    "from sklearn.model_selection import train_test_split, cross_val_score\n",
    "# 获取数据\n",
    "data = pd.read_csv(\"E:/python编书/数据集/insurance.csv\")\n",
    "#查看数据大小\n",
    "data.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['age', 'sex', 'bmi', 'children', 'smoker', 'region', 'charges'], dtype='object')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看数据的列名\n",
    "data.columns\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "age           int64\n",
       "sex          object\n",
       "bmi         float64\n",
       "children      int64\n",
       "smoker       object\n",
       "region       object\n",
       "charges     float64\n",
       "dtype: object"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看数据类型\n",
    "data.dtypes\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>bmi</th>\n",
       "      <th>children</th>\n",
       "      <th>charges</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1338.000000</td>\n",
       "      <td>1338.000000</td>\n",
       "      <td>1338.000000</td>\n",
       "      <td>1338.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>39.207025</td>\n",
       "      <td>30.663397</td>\n",
       "      <td>1.094918</td>\n",
       "      <td>13270.422265</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>14.049960</td>\n",
       "      <td>6.098187</td>\n",
       "      <td>1.205493</td>\n",
       "      <td>12110.011237</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>18.000000</td>\n",
       "      <td>15.960000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1121.873900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>27.000000</td>\n",
       "      <td>26.296250</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4740.287150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>39.000000</td>\n",
       "      <td>30.400000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>9382.033000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>51.000000</td>\n",
       "      <td>34.693750</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>16639.912515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>64.000000</td>\n",
       "      <td>53.130000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>63770.428010</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               age          bmi     children       charges\n",
       "count  1338.000000  1338.000000  1338.000000   1338.000000\n",
       "mean     39.207025    30.663397     1.094918  13270.422265\n",
       "std      14.049960     6.098187     1.205493  12110.011237\n",
       "min      18.000000    15.960000     0.000000   1121.873900\n",
       "25%      27.000000    26.296250     0.000000   4740.287150\n",
       "50%      39.000000    30.400000     1.000000   9382.033000\n",
       "75%      51.000000    34.693750     2.000000  16639.912515\n",
       "max      64.000000    53.130000     5.000000  63770.428010"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#生成描述性统计\n",
    "data.describe()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1faee122978>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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XrNnz1ZiYuJjL3IIhnClvPCdmZmp1q1b6+rVq4qPj9eJEye0Zs0axcTEqGjRos6fDwoKUnJysnx8fLR8+XJFR0crMjKS+xj4nYjfAADgd7Hb7Tx0w1DyDpySpI8//linT5/W0aNHdf78eZ09e1bFihVTxYoV1aBBAy1fvlzbt29XhQoV2AsZbufRpfRms1l2u11BQUGqVauWVq9ercOHD8vb21sTJkxQtWrVZDKZtHfvXi1fvlybNm1SfHy8/P39XXwVwMODhhctWqS4uDjn56zD4dCUKVNUv359PffcczKZTAoICFBUVJTMZrOWLl2qihUrKi4uTmFhYbp//77i4+OZ6Q23YTablZWVpd27dys1NVVvvPGGihQpopo1a2rDhg1avXq1ypUrp5CQEJnNZh0/flwpKSnq3r27srKydOzYMT377LOyWCw8fwC/A38LAACAf9j9+/c1dOhQnT592tVDAf4tcnNznV8gP//8c23cuFHx8fH685//rI8++kgZGRmaNGmSfvjhB0VGRmrGjBnKysrSgAEDdOTIERePHvirR7d2WL58uf70pz9p6NCh2rx5s0qVKqWvvvpKRYsW1e3bt5WZmakXXnhBI0aM0MKFC5WcnKyvv/5awcHBLr4K/LdzOBzKzc3VggULZLVaHwt8V65c0enTp1WwYEGZTCbl5ORIerg/cocOHWS323X48GGZzWY1bNhQ48aNk8ViUW5urqsuB/iV999/X7169dKJEyech2N7eHho5MiRCgoK0ptvvqmBAwdqyJAhGjhwoMxmsxISElSoUCGlp6fL29ub8A38TsRvPHXsdrurhwAA/7W2bdum69evKywszNVDAf5peYelSZLFYpHNZlNOTo4OHjyoli1bqmnTpipbtqy6dOmifv36KTc3VxMnTtSBAwcUGRmpyZMnKzAwUAUKFHDxlQB/lRe++/fvr4kTJyolJUX79+9Xr1699N5778nT01OTJ09WVFSUJkyYoKSkJEkPl9UXK1ZM4eHhrhw+IOnhtiQWi0XDhg1Tv379lJmZqQULFshmsyk8PFxxcXGaM2eOLl26JA8PD2cAj4iIUMGCBXX79m1JemwbKrakgiv97TF777//vurWravU1FRt2rRJmZmZkqRSpUpp8eLF6ty5szIzM3XmzBnFxsZq0aJFkqRbt24pMjJSOTk5v/qdAP53bHsC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6tmzp+rXry8/Pz9Vr15dFotFYWFh6tq1q7y9vTVixAhFR0erbdu2mjx5sv7whz84l3EC7sZut+vy5cu/2lYqJydHO3bs0E8//aQBAwZo3LhxMpvNGj16tPO5BHAnv/Wc8dVXXykzM1M2m00dOnTQlClT1Lt3b3l6enIvwy3lhe8XX3xRGRkZaty4sTMWPv/887p3755GjBih8+fPa+nSpcrOztaKFSvk6+urbt26SSIUwv1kZmYqLS3tsRfnJpNJOTk5WrVqlc6ePauhQ4fq448/VvHixX8VvwG4BvEbT0TZsmUVFRWlkJAQJScna8aMGZo2bZpq1Kghh8OhFStWaP78+bp27Zr++Mc/au7cufr5558VGRmpBQsWsK8b3EpUVJQuXLignj17KjU1VdevX1diYqLatGmjnJwcdevWTa1bt1bDhg1dPVTg76pbt65mzJih7t27q0CBArp586bzMEAfHx81b95cf/nLX/TDDz+odevWCgsL0/z585klC7fl6empfPny6eDBg7Lb7TKbzXI4HPLw8FDFihW1detWvfnmm1qwYIEKFChALITb+nvPGW3btlV2dra6deum7t27a968eSpYsCD3MtyWxWJRnz591KtXL3l4eKh9+/bObdNefvll+fj4aN26dRoxYoRKlCih8PBwffHFF7JarWwPAbdUqFAheXl5aePGjXruueckPVzl4OnpqSpVqujDDz/UyJEjtXz5cpUtW9bFowWQhwMv8UQEBATo2WefVWBgoMaOHauKFSuqZ8+eys7O1saNG5Wenq7x48frlVdekY+Pj5o1a6YXXnhB8fHxztOSAXcRHBysEiVKaP/+/apZs6ZzuWbRokV1584dbd++nXsXT4WIiAjFxsZq8eLFCgoKUtmyZZ0Rxc/PTykpKbp9+7YSEhJkMpnYrx5uzcfHR0FBQZo6dao8PT0VExPjnAV+48YN7dq1S7GxsapduzYHtcKt/V/PGdu2bVPDhg0VExPDvQy3FxkZqRo1amj69OmSpPLlyzu3s6xYsaKee+45JSYmqkOHDmrbtq0sFotsNhsv2+GW/P39FRAQoKlTp8rDw+OxZ40zZ87o4MGDatiwoSpUqCCz2SybzcbzM+AG+BsFT0xAQICys7N17do1hYWFSZIuXbqklJQURUVFKTo6WiaTSdnZ2c7ZW4C7atWqlZo2bSpPT09l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HPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgP8OysMAAAvcSURBVDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxBG/AQAAAACII34DAAAAABBH/AYAAAAAII74DQAAAABAHPEbAAAAAIA44jcAAAAAAHHEbwAAAAAA4ojfAAAAAADEEb8BAAAAAIgjfgMAAAAAEEf8BgAAAAAgjvgNAAAAAEAc8RsAAAAAgDjiNwAAAAAAccRvAAAAAADiiN8AAAAAAMQRvwEAAAAAiCN+AwAAAAAQp8fx+4cffqhTTjmlnn322W3ubdq0qR577LE6//zza9CgQTV06NCaNGlSbdq0aZvZzZs315QpU+qSSy6pE088sc4666x64IEHav369dv93JdeeqmGDRtWAwcOrFNPPbVuvfXWWrlyZU+XDwAAAADwl8ycObOOO+647f6sXbt2Vy8vzo7u9549+ZBff/21xowZU+3t7dvc6+zsrFtuuaWWLVtWp512Wp199tn1xRdf1FNPPVWLFy+uF154ofbaa6+u+ebm5po9e3YNGDCgrr322vr222/r+eefr4ULF9bLL79cBx54YNfspEmT6qmnnqpDDjmkhg8fXhs3bqw33nijli5dWtOmTasBAwb05DEAAAAAAHbYhRdeWGeccUbX73/88Ufddtttddhhh9Whhx66C1eWaUf3u9vxu7W1tcaMGVMrVqzY7v1XXnmlli1bVk1NTdXc3Nx1fcKECfX000/Xyy+/XNdff31VVb333ns1e/bsOu+88+rRRx+tXr16VVXViy++WPfdd18988wzNW7cuKqqWrduXbW0tFRjY2O99tprtf/++1dV1bBhw+qmm26qhx56qJ577rnuPgYAAAAAwF+y995719577931+7Rp02rt2rU1efLkXbiqXDu639069uTZZ5+tSy65pFauXFmDBw/e7szq1aurb9++dfPNN291/aKLLqqqqo8++qjr2ldffVX9+vWr0aNHd4XvqqqLL764qqo+/vjjrmuff/55dXZ21jnnnNMVvquqhgwZUo2NjfXJJ5905xEAAAAAAHa69vb2euKJJ+qOO+6oAw44YFcvJ15P9rtb8Xvq1KnV2NhY06ZNq0svvXS7M+PGjaulS5fWQQcdtNX1r7/+uqqq+vXr13WtqamplixZUgMHDvyvs3369Kmq2ubslt9++602bNiw1fEoAAAAAAB/pxkzZlTv3r3rqquu2tVL6ZaOjo5auXJltbW11eTJk6ujo2NXL6lHerLf3Yrf999/f7322mt18sknd3sRv/zyS82ePbvuv//+2n///eu6667709n29vZasGBB3XnnndXQ0FAjR47sujdw4MAaMGBAzZs3r6ZMmVIbN26stWvX1tixY6u9vb2ampq6vSYAAAAAgJ1ly5YtNWPGjLrhhhuqoaFhVy/nv+ro6Kgrr7yyVq1aVZ2dnTV16tS68sor/98E8J7ud7fO/P7fh4l3x0svvVTjx4+vqqp99tmnWlpa6ogjjtju7AcffNAVsPfYY4+aOHHiVpG9V69e1dLSUuPHj68HH3ywHnzwwa7r48ePrxtvvLFHawMAAAAA2BlWrFhR33zzzZ+elrG7mT59erW1tW11ra2traZPn77VF5J3Vz3d727/w8ue6Nu3b40cObJ++umnmjt3bo0aNaoee+yx7Ub0hoaGGjFiRLW1tdXcuXPrrrvuqk2bNtXll1/eNfPcc8/VokWL6uijj67TTz+9NmzYUPPmzavHH3+8jjrqqBoyZEiP1rdw4cK/+oiwW/FOk8K7TBLvM0m8z6TwLpPE+wy7h3fffbdOOOGEOvjgg3f1Urrls88+2+715cuX/80r2TE93e9eW7Zs2dKTD5g5c2Y1NzdXc3Nzt44cWbFiRV1zzTW133771fz582ufffb509nW1ta64oorqr29vd5+++065JBDatasWTV27NgaOnRoTZo0qXr37l1VVWvWrKmrr766Ojo6av78+c7+BgAAAAD+Vrfcckv179+/7r777l29lH+Enu53t878/iuOP/74uvTSS2v9+vX18ccf/8fZxsbGGjFiRG3evLkWL15cVVWvvvpqVVXdc889XeG7qurII4+sUaNG1aZNm2rOnDn/dw8AAAAAALAdq1atqmOOOWZXL+Mfo6f7vdPi94cfflhvv/32du8deuihVVX1888/V9X/fL3+9ddf79bsd999V717967DDz98m9n+/ft3zQAAAAAA/J3WrVtXffr02dXL+Mfo6X7vtDO/77333mptba0lS5Zss4CVK1dWVXUF7IkTJ9b7779f/fv3r+OOO+4/zvbr169Wr15da9eu7Qrj/7Z69equGQAAAACAv9Onn366q5fwj9LT/d5p3/y+4IILqrOzsyZOnLjV9YULF9bcuXPr2GOPrYEDB3bNVlVNmDChfv/9967Z5cuX1/PPP1/9+vWrs846a6vZhx9+uDo7O7tmv//++2ppaamGhoY699xzd9ZjAAAAAAAQYKd983v06NH1zjvv1IwZM+rLL7+sk046qdasWVMLFiyoAw44oCZMmFC9evWqqqorrrii3nzzzVq0aFFddtllNWTIkPrhhx9q7ty5teeee9YjjzzS9Y8xhw8fXgsWLKg5c+bUqlWr6swzz6wNGzbUvHnzqq2tre67775tvhEOAAAAAMA/W68tW7Zs6ckfzJw5s5qbm6u5ubmampq2utfe3l5PPvlkvfXWW/Xjjz9Wnz596swzz6zbb799m0Dd0dFRLS0tNWvWrGptba199923Bg8eXLfffnvXWd7/tnnz5po8eXLNmjWr1qxZU717965BgwbV6NGj6/TTT9+xJwcAAAAAIFaP4zcAAAAAAOzudtqZ3wAAAAAAsLsQvwEAAAAAiCN+AwAAAAAQR/wGAAAAACCO+A0AAAAAQBzxGwAAAACAOOI3AAAAAABxxG8AAAAAAOKI3wAAAAAAxPkXg5DZV49exoIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1800x720 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#可视化缺失值\n",
    "sns.set(style = \"ticks\")  #设置sns的样式背景\n",
    "msno.matrix(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>bmi</th>\n",
       "      <th>children</th>\n",
       "      <th>smoker</th>\n",
       "      <th>region</th>\n",
       "      <th>charges</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>19</td>\n",
       "      <td>female</td>\n",
       "      <td>27.900</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>southwest</td>\n",
       "      <td>16884.92400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>18</td>\n",
       "      <td>male</td>\n",
       "      <td>33.770</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>southeast</td>\n",
       "      <td>1725.55230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28</td>\n",
       "      <td>male</td>\n",
       "      <td>33.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>southeast</td>\n",
       "      <td>4449.46200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>33</td>\n",
       "      <td>male</td>\n",
       "      <td>22.705</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>northwest</td>\n",
       "      <td>21984.47061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>32</td>\n",
       "      <td>male</td>\n",
       "      <td>28.880</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>northwest</td>\n",
       "      <td>3866.85520</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age     sex     bmi  children  smoker     region      charges\n",
       "0   19  female  27.900         0       1  southwest  16884.92400\n",
       "1   18    male  33.770         1       0  southeast   1725.55230\n",
       "2   28    male  33.000         3       0  southeast   4449.46200\n",
       "3   33    male  22.705         0       0  northwest  21984.47061\n",
       "4   32    male  28.880         0       0  northwest   3866.85520"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将是否吸烟者的值映射为数值，yes对应数值1，no对应数值0\n",
    "smoker_Dict={'yes':1,'no':0}\n",
    "data['smoker']=data['smoker'].map(smoker_Dict)\n",
    "data.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>bmi</th>\n",
       "      <th>children</th>\n",
       "      <th>smoker</th>\n",
       "      <th>region</th>\n",
       "      <th>charges</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>19</td>\n",
       "      <td>0</td>\n",
       "      <td>27.900</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>southwest</td>\n",
       "      <td>16884.92400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>33.770</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>southeast</td>\n",
       "      <td>1725.55230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28</td>\n",
       "      <td>1</td>\n",
       "      <td>33.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>southeast</td>\n",
       "      <td>4449.46200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "      <td>22.705</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>northwest</td>\n",
       "      <td>21984.47061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "      <td>28.880</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>northwest</td>\n",
       "      <td>3866.85520</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age  sex     bmi  children  smoker     region      charges\n",
       "0   19    0  27.900         0       1  southwest  16884.92400\n",
       "1   18    1  33.770         1       0  southeast   1725.55230\n",
       "2   28    1  33.000         3       0  southeast   4449.46200\n",
       "3   33    1  22.705         0       0  northwest  21984.47061\n",
       "4   32    1  28.880         0       0  northwest   3866.85520"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将性别的值映射为数值，男（male）对应数值1，女（female）对应数值0\n",
    "sex_Dict={'female':0,'male':1}\n",
    "data['sex']= data['sex'].map(sex_Dict)\n",
    "data.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "汇总: (1338, 10)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>bmi</th>\n",
       "      <th>children</th>\n",
       "      <th>smoker</th>\n",
       "      <th>charges</th>\n",
       "      <th>region_northeast</th>\n",
       "      <th>region_northwest</th>\n",
       "      <th>region_southeast</th>\n",
       "      <th>region_southwest</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>19</td>\n",
       "      <td>0</td>\n",
       "      <td>27.900</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>16884.92400</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>33.770</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1725.55230</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>28</td>\n",
       "      <td>1</td>\n",
       "      <td>33.000</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>4449.46200</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "      <td>22.705</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>21984.47061</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "      <td>28.880</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3866.85520</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age  sex     bmi  children  smoker      charges  region_northeast  \\\n",
       "0   19    0  27.900         0       1  16884.92400                 0   \n",
       "1   18    1  33.770         1       0   1725.55230                 0   \n",
       "2   28    1  33.000         3       0   4449.46200                 0   \n",
       "3   33    1  22.705         0       0  21984.47061                 0   \n",
       "4   32    1  28.880         0       0   3866.85520                 0   \n",
       "\n",
       "   region_northwest  region_southeast  region_southwest  \n",
       "0                 0                 0                 1  \n",
       "1                 0                 1                 0  \n",
       "2                 0                 1                 0  \n",
       "3                 1                 0                 0  \n",
       "4                 1                 0                 0  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "classes = ['region']\n",
    "# 将数据转化成独热编码, 即对非数值类型的字符进行分类转换成数字。用0-1表示，这就将许多指标划分成若干子列\n",
    "dummies = pd.get_dummies(data[classes])\n",
    "#将分类处理后的数据列添加进列表中同时删除处理前的列，\n",
    "# 采用这种方式的好处：每列的名称不是无意义的\n",
    "data=data.join(dummies).drop(classes, axis = 1)\n",
    "# 新数据集\n",
    "print('汇总:', data.shape)\n",
    "data.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Program Files (x86)\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\data.py:645: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
      "  return self.partial_fit(X, y)\n",
      "D:\\Program Files (x86)\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\base.py:464: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
      "  return self.fit(X, **fit_params).transform(X)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>bmi</th>\n",
       "      <th>children</th>\n",
       "      <th>smoker</th>\n",
       "      <th>charges</th>\n",
       "      <th>region_northeast</th>\n",
       "      <th>region_northwest</th>\n",
       "      <th>region_southeast</th>\n",
       "      <th>region_southwest</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1.438764</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.453320</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>1</td>\n",
       "      <td>16884.92400</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.509965</td>\n",
       "      <td>1</td>\n",
       "      <td>0.509621</td>\n",
       "      <td>-0.078767</td>\n",
       "      <td>0</td>\n",
       "      <td>1725.55230</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.797954</td>\n",
       "      <td>1</td>\n",
       "      <td>0.383307</td>\n",
       "      <td>1.580926</td>\n",
       "      <td>0</td>\n",
       "      <td>4449.46200</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.441948</td>\n",
       "      <td>1</td>\n",
       "      <td>-1.305531</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>0</td>\n",
       "      <td>21984.47061</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.513149</td>\n",
       "      <td>1</td>\n",
       "      <td>-0.292556</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>0</td>\n",
       "      <td>3866.85520</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.584350</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.807656</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>0</td>\n",
       "      <td>3756.62160</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.483668</td>\n",
       "      <td>0</td>\n",
       "      <td>0.455486</td>\n",
       "      <td>-0.078767</td>\n",
       "      <td>0</td>\n",
       "      <td>8240.58960</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.157143</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.479567</td>\n",
       "      <td>1.580926</td>\n",
       "      <td>0</td>\n",
       "      <td>7281.50560</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-0.157143</td>\n",
       "      <td>1</td>\n",
       "      <td>-0.136714</td>\n",
       "      <td>0.751079</td>\n",
       "      <td>0</td>\n",
       "      <td>6406.41070</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1.480485</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.791252</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>0</td>\n",
       "      <td>28923.13692</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        age  sex       bmi  children  smoker      charges  region_northeast  \\\n",
       "0 -1.438764    0 -0.453320 -0.908614       1  16884.92400                 0   \n",
       "1 -1.509965    1  0.509621 -0.078767       0   1725.55230                 0   \n",
       "2 -0.797954    1  0.383307  1.580926       0   4449.46200                 0   \n",
       "3 -0.441948    1 -1.305531 -0.908614       0  21984.47061                 0   \n",
       "4 -0.513149    1 -0.292556 -0.908614       0   3866.85520                 0   \n",
       "5 -0.584350    0 -0.807656 -0.908614       0   3756.62160                 0   \n",
       "6  0.483668    0  0.455486 -0.078767       0   8240.58960                 0   \n",
       "7 -0.157143    0 -0.479567  1.580926       0   7281.50560                 0   \n",
       "8 -0.157143    1 -0.136714  0.751079       0   6406.41070                 1   \n",
       "9  1.480485    0 -0.791252 -0.908614       0  28923.13692                 0   \n",
       "\n",
       "   region_northwest  region_southeast  region_southwest  \n",
       "0                 0                 0                 1  \n",
       "1                 0                 1                 0  \n",
       "2                 0                 1                 0  \n",
       "3                 1                 0                 0  \n",
       "4                 1                 0                 0  \n",
       "5                 0                 1                 0  \n",
       "6                 0                 1                 0  \n",
       "7                 1                 0                 0  \n",
       "8                 0                 0                 0  \n",
       "9                 1                 0                 0  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#筛选出数据类型不是字符型的列\n",
    "num = ['age', 'bmi', 'children']\n",
    "standard_scaler = StandardScaler()\n",
    "data[num] = standard_scaler.fit_transform(data[num])\n",
    "data.head(10)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "相关矩阵:\n",
      "                        age       sex       bmi  children    smoker   charges  \\\n",
      "age               1.000000 -0.020856  0.109272  0.042469 -0.025019  0.299008   \n",
      "sex              -0.020856  1.000000  0.046371  0.017163  0.076185  0.057292   \n",
      "bmi               0.109272  0.046371  1.000000  0.012759  0.003750  0.198341   \n",
      "children          0.042469  0.017163  0.012759  1.000000  0.007673  0.067998   \n",
      "smoker           -0.025019  0.076185  0.003750  0.007673  1.000000  0.787251   \n",
      "charges           0.299008  0.057292  0.198341  0.067998  0.787251  1.000000   \n",
      "region_northeast  0.002475 -0.002425 -0.138156 -0.022808  0.002811  0.006349   \n",
      "region_northwest -0.000407 -0.011156 -0.135996  0.024806 -0.036945 -0.039905   \n",
      "region_southeast -0.011642  0.017117  0.270025 -0.023066  0.068498  0.073982   \n",
      "region_southwest  0.010016 -0.004184 -0.006205  0.021914 -0.036945 -0.043210   \n",
      "\n",
      "                  region_northeast  region_northwest  region_southeast  \\\n",
      "age                       0.002475         -0.000407         -0.011642   \n",
      "sex                      -0.002425         -0.011156          0.017117   \n",
      "bmi                      -0.138156         -0.135996          0.270025   \n",
      "children                 -0.022808          0.024806         -0.023066   \n",
      "smoker                    0.002811         -0.036945          0.068498   \n",
      "charges                   0.006349         -0.039905          0.073982   \n",
      "region_northeast          1.000000         -0.320177         -0.345561   \n",
      "region_northwest         -0.320177          1.000000         -0.346265   \n",
      "region_southeast         -0.345561         -0.346265          1.000000   \n",
      "region_southwest         -0.320177         -0.320829         -0.346265   \n",
      "\n",
      "                  region_southwest  \n",
      "age                       0.010016  \n",
      "sex                      -0.004184  \n",
      "bmi                      -0.006205  \n",
      "children                  0.021914  \n",
      "smoker                   -0.036945  \n",
      "charges                  -0.043210  \n",
      "region_northeast         -0.320177  \n",
      "region_northwest         -0.320829  \n",
      "region_southeast         -0.346265  \n",
      "region_southwest          1.000000  \n",
      "相关矩阵的上三角表示:\n",
      "                   age       sex       bmi  children    smoker   charges  \\\n",
      "age               0.0 -0.020856  0.109272  0.042469 -0.025019  0.299008   \n",
      "sex              -0.0  0.000000  0.046371  0.017163  0.076185  0.057292   \n",
      "bmi               0.0  0.000000  0.000000  0.012759  0.003750  0.198341   \n",
      "children          0.0  0.000000  0.000000  0.000000  0.007673  0.067998   \n",
      "smoker           -0.0  0.000000  0.000000  0.000000  0.000000  0.787251   \n",
      "charges           0.0  0.000000  0.000000  0.000000  0.000000  0.000000   \n",
      "region_northeast  0.0 -0.000000 -0.000000 -0.000000  0.000000  0.000000   \n",
      "region_northwest -0.0 -0.000000 -0.000000  0.000000 -0.000000 -0.000000   \n",
      "region_southeast -0.0  0.000000  0.000000 -0.000000  0.000000  0.000000   \n",
      "region_southwest  0.0 -0.000000 -0.000000  0.000000 -0.000000 -0.000000   \n",
      "\n",
      "                  region_northeast  region_northwest  region_southeast  \\\n",
      "age                       0.002475         -0.000407         -0.011642   \n",
      "sex                      -0.002425         -0.011156          0.017117   \n",
      "bmi                      -0.138156         -0.135996          0.270025   \n",
      "children                 -0.022808          0.024806         -0.023066   \n",
      "smoker                    0.002811         -0.036945          0.068498   \n",
      "charges                   0.006349         -0.039905          0.073982   \n",
      "region_northeast          0.000000         -0.320177         -0.345561   \n",
      "region_northwest         -0.000000          0.000000         -0.346265   \n",
      "region_southeast         -0.000000         -0.000000          0.000000   \n",
      "region_southwest         -0.000000         -0.000000         -0.000000   \n",
      "\n",
      "                  region_southwest  \n",
      "age                       0.010016  \n",
      "sex                      -0.004184  \n",
      "bmi                      -0.006205  \n",
      "children                  0.021914  \n",
      "smoker                   -0.036945  \n",
      "charges                  -0.043210  \n",
      "region_northeast         -0.320177  \n",
      "region_northwest         -0.320829  \n",
      "region_southeast         -0.346265  \n",
      "region_southwest          0.000000  \n",
      "相关矩阵：\n",
      " age               age                 0.000000\n",
      "                  sex                -0.020856\n",
      "                  bmi                 0.109272\n",
      "                  children            0.042469\n",
      "                  smoker             -0.025019\n",
      "                  charges             0.299008\n",
      "                  region_northeast    0.002475\n",
      "                  region_northwest   -0.000407\n",
      "                  region_southeast   -0.011642\n",
      "                  region_southwest    0.010016\n",
      "sex               age                -0.000000\n",
      "                  sex                 0.000000\n",
      "                  bmi                 0.046371\n",
      "                  children            0.017163\n",
      "                  smoker              0.076185\n",
      "                  charges             0.057292\n",
      "                  region_northeast   -0.002425\n",
      "                  region_northwest   -0.011156\n",
      "                  region_southeast    0.017117\n",
      "                  region_southwest   -0.004184\n",
      "bmi               age                 0.000000\n",
      "                  sex                 0.000000\n",
      "                  bmi                 0.000000\n",
      "                  children            0.012759\n",
      "                  smoker              0.003750\n",
      "                  charges             0.198341\n",
      "                  region_northeast   -0.138156\n",
      "                  region_northwest   -0.135996\n",
      "                  region_southeast    0.270025\n",
      "                  region_southwest   -0.006205\n",
      "                                        ...   \n",
      "region_northwest  age                -0.000000\n",
      "                  sex                -0.000000\n",
      "                  bmi                -0.000000\n",
      "                  children            0.000000\n",
      "                  smoker             -0.000000\n",
      "                  charges            -0.000000\n",
      "                  region_northeast   -0.000000\n",
      "                  region_northwest    0.000000\n",
      "                  region_southeast   -0.346265\n",
      "                  region_southwest   -0.320829\n",
      "region_southeast  age                -0.000000\n",
      "                  sex                 0.000000\n",
      "                  bmi                 0.000000\n",
      "                  children           -0.000000\n",
      "                  smoker              0.000000\n",
      "                  charges             0.000000\n",
      "                  region_northeast   -0.000000\n",
      "                  region_northwest   -0.000000\n",
      "                  region_southeast    0.000000\n",
      "                  region_southwest   -0.346265\n",
      "region_southwest  age                 0.000000\n",
      "                  sex                -0.000000\n",
      "                  bmi                -0.000000\n",
      "                  children            0.000000\n",
      "                  smoker             -0.000000\n",
      "                  charges            -0.000000\n",
      "                  region_northeast   -0.000000\n",
      "                  region_northwest   -0.000000\n",
      "                  region_southeast   -0.000000\n",
      "                  region_southwest    0.000000\n",
      "Length: 100, dtype: float64\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>第一个变量</th>\n",
       "      <th>第二个变量</th>\n",
       "      <th>相关性</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>smoker</td>\n",
       "      <td>charges</td>\n",
       "      <td>0.787251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>age</td>\n",
       "      <td>charges</td>\n",
       "      <td>0.299008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>bmi</td>\n",
       "      <td>region_southeast</td>\n",
       "      <td>0.270025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>bmi</td>\n",
       "      <td>charges</td>\n",
       "      <td>0.198341</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>age</td>\n",
       "      <td>bmi</td>\n",
       "      <td>0.109272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>sex</td>\n",
       "      <td>smoker</td>\n",
       "      <td>0.076185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>charges</td>\n",
       "      <td>region_southeast</td>\n",
       "      <td>0.073982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>smoker</td>\n",
       "      <td>region_southeast</td>\n",
       "      <td>0.068498</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>children</td>\n",
       "      <td>charges</td>\n",
       "      <td>0.067998</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>sex</td>\n",
       "      <td>charges</td>\n",
       "      <td>0.057292</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>sex</td>\n",
       "      <td>bmi</td>\n",
       "      <td>0.046371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>age</td>\n",
       "      <td>children</td>\n",
       "      <td>0.042469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>children</td>\n",
       "      <td>region_northwest</td>\n",
       "      <td>0.024806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>children</td>\n",
       "      <td>region_southwest</td>\n",
       "      <td>0.021914</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>sex</td>\n",
       "      <td>children</td>\n",
       "      <td>0.017163</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>sex</td>\n",
       "      <td>region_southeast</td>\n",
       "      <td>0.017117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>bmi</td>\n",
       "      <td>children</td>\n",
       "      <td>0.012759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>age</td>\n",
       "      <td>region_southwest</td>\n",
       "      <td>0.010016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>children</td>\n",
       "      <td>smoker</td>\n",
       "      <td>0.007673</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>charges</td>\n",
       "      <td>region_northeast</td>\n",
       "      <td>0.006349</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       第一个变量             第二个变量       相关性\n",
       "0     smoker           charges  0.787251\n",
       "1        age           charges  0.299008\n",
       "2        bmi  region_southeast  0.270025\n",
       "3        bmi           charges  0.198341\n",
       "4        age               bmi  0.109272\n",
       "5        sex            smoker  0.076185\n",
       "6    charges  region_southeast  0.073982\n",
       "7     smoker  region_southeast  0.068498\n",
       "8   children           charges  0.067998\n",
       "9        sex           charges  0.057292\n",
       "10       sex               bmi  0.046371\n",
       "11       age          children  0.042469\n",
       "12  children  region_northwest  0.024806\n",
       "13  children  region_southwest  0.021914\n",
       "14       sex          children  0.017163\n",
       "15       sex  region_southeast  0.017117\n",
       "16       bmi          children  0.012759\n",
       "17       age  region_southwest  0.010016\n",
       "18  children            smoker  0.007673\n",
       "19   charges  region_northeast  0.006349"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cormatrix = data.corr()\n",
    "print(\"相关矩阵:\\n\",cormatrix)\n",
    "# 转化为一维表\n",
    "#返回函数的上三角矩阵，把对角线上的置0，让他们不是最高的。\n",
    "#np.tri()生成下三角矩阵，k=-1即对角线向下偏移一个单位，对角线及以上元素全都置零\n",
    "#.T矩阵转置，下三角矩阵转置变成上三角矩阵\n",
    "cormatrix *= np.tri(*cormatrix.values.shape, k=-1).T  \n",
    "print(\"相关矩阵的上三角表示:\\n\",cormatrix)\n",
    "cormatrix = cormatrix.stack()#利用stack()进行数据重排，stack以列为索引进行堆积\n",
    "print(\"相关矩阵：\\n\",cormatrix )\n",
    "#返回某个变量和其他变量的相关性\n",
    "#reindex(新索引)：按新索引排序；abs():返回绝对值；sort_values()：排序，ascending=False：升序，默认true：升序；reset_index()：将行索引转为新列的值，并命名level_\n",
    "cormatrix = cormatrix.reindex(cormatrix.sort_values(ascending=False).index).reset_index()\n",
    "cormatrix.columns = [\"第一个变量\", \"第二个变量\", \"相关性\"]\n",
    "cormatrix.head(20)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "charges             1.000000\n",
       "smoker              0.787251\n",
       "age                 0.299008\n",
       "bmi                 0.198341\n",
       "region_southeast    0.073982\n",
       "children            0.067998\n",
       "sex                 0.057292\n",
       "region_northeast    0.006349\n",
       "region_northwest   -0.039905\n",
       "region_southwest   -0.043210\n",
       "Name: charges, dtype: float64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看各个特征与charges的相关系数\n",
    "cormatrix2 = data.corr()\n",
    "cormatrix2['charges'].sort_values(ascending =False)#特征选择\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>smoker</th>\n",
       "      <th>age</th>\n",
       "      <th>bmi</th>\n",
       "      <th>region_southeast</th>\n",
       "      <th>children</th>\n",
       "      <th>sex</th>\n",
       "      <th>charges</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.438764</td>\n",
       "      <td>-0.453320</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>0</td>\n",
       "      <td>16884.92400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>-1.509965</td>\n",
       "      <td>0.509621</td>\n",
       "      <td>1</td>\n",
       "      <td>-0.078767</td>\n",
       "      <td>1</td>\n",
       "      <td>1725.55230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>-0.797954</td>\n",
       "      <td>0.383307</td>\n",
       "      <td>1</td>\n",
       "      <td>1.580926</td>\n",
       "      <td>1</td>\n",
       "      <td>4449.46200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>-0.441948</td>\n",
       "      <td>-1.305531</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>1</td>\n",
       "      <td>21984.47061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>-0.513149</td>\n",
       "      <td>-0.292556</td>\n",
       "      <td>0</td>\n",
       "      <td>-0.908614</td>\n",
       "      <td>1</td>\n",
       "      <td>3866.85520</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   smoker       age       bmi  region_southeast  children  sex      charges\n",
       "0       1 -1.438764 -0.453320                 0 -0.908614    0  16884.92400\n",
       "1       0 -1.509965  0.509621                 1 -0.078767    1   1725.55230\n",
       "2       0 -0.797954  0.383307                 1  1.580926    1   4449.46200\n",
       "3       0 -0.441948 -1.305531                 0 -0.908614    1  21984.47061\n",
       "4       0 -0.513149 -0.292556                 0 -0.908614    1   3866.85520"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_X= pd.concat([data['smoker'],data['age'],data['bmi'],data['region_southeast'],\n",
    "                data['children'],data['sex'],data['charges']],axis=1)\n",
    "data_X.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分离因变量\n",
    "target = data_X.charges\n",
    "# 分离自变量\n",
    "features = data_X.drop(columns=['charges'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1faee25d358>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 分析医疗费用的分布是否符合正态\n",
    "x = target\n",
    "sns.distplot(x, hist=True, kde=True, kde_kws={\"color\": \"k\", \"lw\": 3, \"label\": \"KDE\"},\n",
    "          hist_kws={\"histtype\": \"stepfilled\", \"linewidth\": 3, \"alpha\": 1, \"color\": \"g\"})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1faee2b8278>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "target=np.log1p(target)\n",
    "# 分析医疗费用的分布是否符合正态\n",
    "x = target\n",
    "sns.distplot(x, hist=True, kde=True, kde_kws={\"color\": \"k\", \"lw\": 3, \"label\": \"KDE\"},\n",
    "          hist_kws={\"histtype\": \"stepfilled\", \"linewidth\": 3, \"alpha\": 1, \"color\": \"g\"})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集 (936, 6) ，测试集 (402, 6)\n"
     ]
    }
   ],
   "source": [
    "#划分数据集，sklearn.model_selection.train_test_split随机划分训练集和测试集\n",
    "seed=123   #随机种子数\n",
    "X_train, X_test, y_train, y_test = train_test_split(features, target, test_size = 0.3,\n",
    "                                  random_state = seed)#设置70%为训练数据\n",
    "print(\"训练集\", X_train.shape, \"，测试集\", X_test.shape)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳拟合线:截距 8.851551231348216 \n",
      "回归系数： [ 1.53318059  0.48875255  0.08953472 -0.07628352  0.1276445  -0.08411224]\n"
     ]
    }
   ],
   "source": [
    "#第1步：导入线性回归\n",
    "from sklearn.linear_model import LinearRegression\n",
    "# 第2步：创建模型：线性回归\n",
    "model = LinearRegression()\n",
    "#第3步：训练模型\n",
    "model.fit(X_train,y_train)\n",
    "#获得线性回归模型的参数\n",
    "a=model.intercept_#截距\n",
    "b=model.coef_#回归系数\n",
    "print(\"最佳拟合线:截距\",a,\"\\n回归系数：\",b)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "个人医保数据线性回归模型的决定系数即R平方为： 0.7830070691295015\n",
      "个人医保数据线性回归模型的平均绝对误差为： 0.2707571270860691\n",
      "个人医保数据线性回归模型的均方误差MSE为： 0.17131210181347262\n",
      "个人医保数据线性回归模型的中值绝对误差为： 0.14746506518623992\n",
      "个人医保数据线性回归模型的可解释方差值为： 0.7831735070420169\n",
      "个人医保数据线性回归模型的判定系数即R平方为： 0.7830070691295015\n"
     ]
    }
   ],
   "source": [
    "#对线性回归进行预测\n",
    "y_pred = model.predict(X_test)\n",
    "#评价回归模型\n",
    "score=model.score(X_test, y_test)  #查看判定系数的方法一\n",
    "print(\"个人医保数据线性回归模型的决定系数即R平方为：\",score)\n",
    "from sklearn.metrics import explained_variance_score,mean_absolute_error,\\\n",
    "mean_squared_error,median_absolute_error,r2_score\n",
    "print(\"个人医保数据线性回归模型的平均绝对误差为：\",mean_absolute_error(y_test,y_pred))\n",
    "print(\"个人医保数据线性回归模型的均方误差MSE为：\", mean_squared_error(y_test,y_pred))\n",
    "print(\"个人医保数据线性回归模型的中值绝对误差为：\",median_absolute_error(y_test,y_pred))\n",
    "print(\"个人医保数据线性回归模型的可解释方差值为：\", explained_variance_score(y_test,y_pred))\n",
    "#查看判定系数的方法二\n",
    "print(\"个人医保数据线性回归模型的判定系数即R平方为：\",r2_score(y_test,y_pred))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最佳拟合线:截距 8.851551231348216 \n",
      "回归系数： [ 1.53318059  0.48875255  0.08953472 -0.07628352  0.1276445  -0.08411224]\n",
      "个人医保数据线性回归模型的平均绝对误差为： 0.2815407634403475\n",
      "个人医保数据线性回归模型的均方误差MSE为： 0.20010936615767003\n",
      "个人医保数据线性回归模型的中值绝对误差为： 0.13490158250103956\n",
      "个人医保数据线性回归模型的可解释方差值为： 0.7630797649634314\n",
      "个人医保数据线性回归模型的判定系数即R平方为： 0.7630793987615034\n"
     ]
    }
   ],
   "source": [
    "# 交叉验证\n",
    "from sklearn.model_selection import cross_val_predict\n",
    "predicted = cross_val_predict(model,features, target,cv=10)\n",
    "#获得线性回归模型的参数\n",
    "a=model.intercept_#截距\n",
    "b=model.coef_#回归系数\n",
    "print(\"最佳拟合线:截距\",a,\"\\n回归系数：\",b)\n",
    "print(\"个人医保数据线性回归模型的平均绝对误差为：\",mean_absolute_error(target,predicted))\n",
    "print(\"个人医保数据线性回归模型的均方误差MSE为：\", mean_squared_error(target,predicted))\n",
    "print(\"个人医保数据线性回归模型的中值绝对误差为：\",median_absolute_error(target,predicted))\n",
    "print(\"个人医保数据线性回归模型的可解释方差值为：\",\n",
    "explained_variance_score(target,predicted))\n",
    "print(\"个人医保数据线性回归模型的判定系数即R平方为：\",r2_score(target,predicted))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
